home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 297_01 / prbltin.h < prev    next >
C/C++ Source or Header  |  1989-10-25  |  2KB  |  44 lines

  1. /* prbuiltin.h */
  2.  
  3. extern node_ptr_t Arguments;
  4. extern subst_ptr_t SubstGoal;
  5. extern subst_ptr_t DerefSubst;
  6. extern node_ptr_t DerefNode;
  7. extern char *Print_buffer ;
  8.  
  9.  
  10. /* The following macros are not very efficient but easy to use.
  11.  * As an example
  12.  * ARG_ATOM(6,atomp) is going to set atomp to the atom value of the
  13.  * sixth argument of the current if it exists and returns with an error
  14.  * otherwise
  15.  */
  16. #define ARG_ATOM(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  17.             if(NODEPTR_TYPE(DerefNode)!=ATOM)return(typerr(N,ATOM));\
  18.             A = NODEPTR_ATOM(DerefNode);
  19. #define ARG_VAR(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  20.             if(NODEPTR_TYPE(DerefNode)!= VAR)return(typerr(N,VAR));\
  21.             A = DerefNode;
  22. #define ARG_STRING(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  23.             if(NODEPTR_TYPE(DerefNode)!=STRING)return(typerr(N,STRING));\
  24.             A = NODEPTR_STRING(DerefNode);
  25. #define ARG_INT(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  26.             if(NODEPTR_TYPE(DerefNode)!=INT)return(typerr(N,INT));\
  27.             A = NODEPTR_INT(DerefNode);
  28. #define ARG_REAL(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  29.             if(NODEPTR_TYPE(DerefNode)!=REAL)return(typerr(N,REAL));\
  30.             A = NODEPTR_REAL(DerefNode);
  31. #define ARG_PAIR(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  32.             if(NODEPTR_TYPE(DerefNode)!=PAIR)return(typerr(N,PAIR));\
  33.             A = NODEPTR_PAIR(DerefNode);
  34. #define ARG_CLAUSE(N,A) if(nth_arg(N) == NULL)return(nargerr(N));\
  35.             if(NODEPTR_TYPE(DerefNode)!=CLAUSE)return(typerr(N,CLAUSE));\
  36.             A = NODEPTR_CLAUSE(DerefNode);
  37.  
  38. #define CHECK_TYPE_ARG(N, T)if(nth_arg(N) == NULL)return(nargerr(N));\
  39.             if(NODEPTR_TYPE(DerefNode) != T)return(typerr(N, T));
  40.  
  41. #define FAIL 0
  42.  
  43. /* end of file */
  44.